The completed program is given below
In the completed program,
the roles of oldGuess and of newGuess can both be played
by the variable guess
.
The value for oldGuess is used on the right of the =
sign.
After a value for newGuess is calculated,
it is assigned to the variable guess
on the left
of the =
sign.
class SquareRoot { public static void main( String[] args ) { final double smallValue = 1.0E-14 ; double N = 3.00 ; double guess = 1.00 ; while ( Math.abs( N/(guess*guess) - 1.0 ) > smallValue ) { // calculate a new value for the guess guess = N/(2*guess) + guess/2 ; } System.out.println("The square root of " + N + " is " + guess ) ; } }
Here is the output of the program:
C:JavaLessons\chap19>java SquareRoot The square root of 3.0 is 1.7320508075688772
The last several digits of this output are probably in error since the program only computes 14 decimal places of accuracy.
If you asked for more accuracy than is possible in double precision
variables, what might happen?
For example, say that smallValue
were 1.0E-21?